/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package UI;

import Logica.Usuario;
import Manejadores.ManejadorCargarAccion;
import Manejadores.ManejadorUsuarios;
import Persistencia.Singleton_Sesion;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Facundo
 */
public class IAsignarAccionesAbiertas extends javax.swing.JFrame {

    private ManejadorUsuarios manejadorUsuarios;
    private Singleton_Sesion sesion;
    private ManejadorCargarAccion manejadorCargarAccion;
    private Usuario usuarioADeshabilitar;
    private ArrayList<String> nombresDeUsuariosAAsignar;
    private ArrayList IDsDeAccionesAActualizar;

    /**
     * Creates new form IAsignarAccionesAbiertas
     */
    public IAsignarAccionesAbiertas(LinkedList accionesAbiertas, Usuario usuarioADeshabilitar) {
        initComponents();
        manejadorUsuarios = new ManejadorUsuarios();
        manejadorUsuarios.setAccionesAbiertas(accionesAbiertas);
        nombresDeUsuariosAAsignar = new ArrayList();
        IDsDeAccionesAActualizar = new ArrayList();
        cargarTabla(manejadorUsuarios.cargarModeloTablaAccionesAbiertas());
        this.jTAcciones.setRowSelectionAllowed(true);
        this.usuarioADeshabilitar = usuarioADeshabilitar;
        //Hago que se seleccione por defecto la primer fila
        jTAcciones.addRowSelectionInterval(0, 0);
        //Cargo el combobox de usuarios segun los usuarios asignados al proyecto de la acción
        this.cargarCombo(manejadorUsuarios.cargarComboUsuariosPorProyecto(jTAcciones.getValueAt(0, 6).toString()));
        sesion = Singleton_Sesion.getInstancia();
        if (sesion.getUsuarioLogueado() != null) {
            this.setTitle(this.getTitle() + " - " + sesion.getUsuarioLogueado().getNombreUsuario());
        }
    }

    private void cargarCombo(LinkedList usuarios) {
        //Este método carga el combobox de usuarios segun los usuarios asignados al proyecto al cual pertenece una acción
        Iterator it = usuarios.iterator();
        this.jCBUsuarios.removeAllItems();
        this.jCBUsuarios.addItem("Seleccione un usuario...");
        while (it.hasNext()) {
            Usuario u = (Usuario) it.next();
            //Esto es para que no se agregue al combobox la opción de seleccionar el mismo usuario que se quiere deshabilitar
            if (!this.getDeshabilitar().getNombreUsuario().equals(u.getNombreUsuario())) {
                this.jCBUsuarios.addItem(u.getNombreUsuario());
            }
        }
    }

    public Usuario getDeshabilitar() {
        return usuarioADeshabilitar;
    }

    public void setDeshabilitar(Usuario usuarioADeshabilitar) {
        this.usuarioADeshabilitar = usuarioADeshabilitar;
    }

    private void cargarTabla(DefaultTableModel modeloAccionesAbiertas) {
        this.jTAcciones.setModel(modeloAccionesAbiertas);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLExplicacion = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTAcciones = new javax.swing.JTable();
        jLAsignarA = new javax.swing.JLabel();
        jCBUsuarios = new javax.swing.JComboBox();
        jBAsignar = new javax.swing.JButton();
        jBTerminar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Acción requerida");
        setLocationByPlatform(true);
        setMaximizedBounds(new java.awt.Rectangle(0, 0, 0, 0));
        setMaximumSize(new java.awt.Dimension(620, 346));
        setMinimumSize(new java.awt.Dimension(620, 346));
        setPreferredSize(new java.awt.Dimension(620, 346));
        setResizable(false);

        jLExplicacion.setText("El usuario que se quiere deshabilitar tiene las siguientes acciones abiertas, por favor asígnelas a otro usuario del proyecto");

        jTAcciones.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jTAcciones.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jTAcciones.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTAccionesMouseClicked(evt);
            }
        });
        jScrollPane2.setViewportView(jTAcciones);

        jLAsignarA.setText("Asignar accion seleccionada a:");

        jCBUsuarios.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jBAsignar.setText("Asignar");
        jBAsignar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBAsignarActionPerformed(evt);
            }
        });

        jBTerminar.setText("Terminar");
        jBTerminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBTerminarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLExplicacion)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLAsignarA)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jCBUsuarios, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jBAsignar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jBTerminar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLExplicacion)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 227, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLAsignarA)
                    .addComponent(jCBUsuarios, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jBAsignar)
                    .addComponent(jBTerminar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-620)/2, (screenSize.height-346)/2, 620, 346);
    }// </editor-fold>//GEN-END:initComponents

    private void jBAsignarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBAsignarActionPerformed
        //Por las dudas me fijo que solo se pueda seleccionar una fila
        if (this.jTAcciones.getSelectedRowCount() == 1) {
            //Tiene que haber un usuario seleccionado
            if (!this.jCBUsuarios.getSelectedItem().toString().equals("Seleccione un usuario...")) {
                //Guardo el nombre del usuario a asignar
                this.nombresDeUsuariosAAsignar.add(this.jCBUsuarios.getSelectedItem().toString());
                //Guardo el ID de la acción a actualizar
                this.IDsDeAccionesAActualizar.add(jTAcciones.getValueAt(jTAcciones.getSelectedRow(), 0).toString());
//                manejadorUsuarios.actualizarUsuarioEnAccion(Integer.parseInt(jTAcciones.getValueAt(jTAcciones.getSelectedRow(), 0).toString()), this.jCBUsuarios.getSelectedItem().toString());
                //Actualizo el modelo de la tabla para que se borre la accion actualizada
                cargarTabla(manejadorUsuarios.actualizarModeloTablaAccionesAbiertas(Integer.parseInt(jTAcciones.getValueAt(jTAcciones.getSelectedRow(), 0).toString())));
                //Hago que se seleccione la primer acción de la lista si es que quedan acciones
                if (this.jTAcciones.getModel().getRowCount() != 0) {
                    jTAcciones.addRowSelectionInterval(0, 0);
                    this.cargarCombo(manejadorUsuarios.cargarComboUsuariosPorProyecto(jTAcciones.getValueAt(0, 6).toString()));
                }
            } else {
                JOptionPane.showMessageDialog(null, "Por favor seleccione un usuario de la lista.");
            }
        } else {
            JOptionPane.showMessageDialog(null, "Por favor seleccione una sola acción de la lista.");
        }
    }//GEN-LAST:event_jBAsignarActionPerformed

    private void jTAccionesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTAccionesMouseClicked
        //Este método carga el combobox de usuarios segun los usuarios asignados al proyecto al cual pertenece la acción seleccionada
        cargarCombo(manejadorUsuarios.cargarComboUsuariosPorProyecto(jTAcciones.getValueAt(jTAcciones.getSelectedRow(), 6).toString()));
    }//GEN-LAST:event_jTAccionesMouseClicked

    private void jBTerminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBTerminarActionPerformed
        // Deshabilitar el usuario si es que la tabla está vacía y volver a la IUsuarios
        if (this.jTAcciones.getModel().getRowCount() == 0) {
            if (manejadorUsuarios.deshabilitarUsuario(usuarioADeshabilitar)) {
                //Actualizo todas las acciones en la BD
                for (int i = 0; i < this.IDsDeAccionesAActualizar.size(); i++) {
                    manejadorUsuarios.actualizarUsuarioEnAccion(Integer.parseInt((String) this.IDsDeAccionesAActualizar.get(i)), this.nombresDeUsuariosAAsignar.get(i));
                }
                JOptionPane.showMessageDialog(null, "Usuario deshabilitado con éxito.");
            } else {
                JOptionPane.showMessageDialog(null, "No se pudo deshabilitar el usuario.");
            }
            this.setVisible(false);
            new IUsuarios().setVisible(true);
        } else {
            JOptionPane.showMessageDialog(null, "Debe asignar todas las acciones de la tabla a otro usuario antes de terminar.");
        }
    }//GEN-LAST:event_jBTerminarActionPerformed
    /**
     * @param args the command line arguments
     */
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jBAsignar;
    private javax.swing.JButton jBTerminar;
    private javax.swing.JComboBox jCBUsuarios;
    private javax.swing.JLabel jLAsignarA;
    private javax.swing.JLabel jLExplicacion;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable jTAcciones;
    // End of variables declaration//GEN-END:variables

}
